//
//  LCNavigationController.swift
//  SwiftWeiBo
//
//  Created by LiCheng on 2017/2/8.
//  Copyright © 2017年 LiCheng. All rights reserved.
//


/**
    作用:
     - 隐藏默认的 bar
     - 统一处理 push 
        - 当不是栈底控制器时，隐藏底部 bar， 修改返回按钮
 
    解决问题:
     - 文字自定义高亮颜色 ，
     - push 后 手势返回时导航栏的模糊

 */

import UIKit

class LCNavigationController: UINavigationController {


    // MARK: - 系统方法
    override func viewDidLoad() {
        // 隐藏 导航条, 使用自定义 导航条
        navigationBar.isHidden = true
    }


    /// 重写 push 方法， 所有的 push 动作都会调用此方法
    override func pushViewController(_ viewController: UIViewController, animated: Bool) {

        // 如果不是栈底根控制器才会隐藏 tabbar，根控制器不需要隐藏
        if childViewControllers.count > 0 { // 说明 有子控制器

            var title = "返回"
            // 1. 隐藏 tabbar
            viewController.hidesBottomBarWhenPushed = true

            // 2. 设置返回按钮
            if let vc = viewController as? LCBaseViewController { // 如果是自定义 基类

                // 判断控制器级数， 只有一个子控制器时，显示栈底控制器的标题
                if childViewControllers.count == 1 {
                    title = childViewControllers.first?.title ?? "返回"
                }

                // 取出自定义 navItem, 设置返回按钮
                vc.navItem.leftBarButtonItem = UIBarButtonItem(
                    title: title,
                    target:  self,
                    action: #selector(backToParent),
                    isBack:true)
            }
        }

        super.pushViewController(viewController, animated: true)
    }

    // MARK: - 私有方法
    /// pop 返回到上一级控制器
    @objc fileprivate func backToParent() {
        popViewController(animated: true)
    }
}
